package com.sq.imp;

import com.sq.abstractClass.MainFrame;
import org.pushingpixels.substance.api.SubstanceCortex;
import org.pushingpixels.substance.api.skin.BusinessSkin;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Objects;

public class MainFrameImp extends MainFrame {
    // 静态变量标记皮肤是否已初始化
    private static boolean skinInitialized = false;
    private static final ArrayList<MainFrameImp> mainFrameImps = new ArrayList<>();

    private static boolean createTemp = true;
    public MainFrameImp() {
        // 在 EDT 线程中初始化界面
        SwingUtilities.invokeLater(() -> {
            // 确保皮肤只初始化一次，且在所有窗口创建前
            if (!skinInitialized) {
                initializeSkin();
                skinInitialized = true;
            }

            // 创建并显示应用窗口
            try {
                init();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
    }

    private static void initializeSkin() {
        try {
            // 设置默认皮肤
            SubstanceCortex.GlobalScope.setSkin(new BusinessSkin());
            // 启用窗口装饰
            JFrame.setDefaultLookAndFeelDecorated(true);
            JDialog.setDefaultLookAndFeelDecorated(true);

//            // 预加载皮肤资源（可选优化）
//            preloadSkinResources();

        } catch (Exception e) {
            System.err.println("无法设置 Substance 皮肤: " + e.getMessage());
            e.printStackTrace();
        }
    }

    private static void preloadSkinResources() {
        // 创建一个临时窗口来预加载资源
        createNewWindow();
    }

    private void init() throws IOException {
        mainFrameImps.add(this);
        this.setSize(NoteSize);
        this.setLocation(NoteLocation);
        this.setTitle("记事本");
        // 修改关闭操作为 DISPOSE_ON_CLOSE
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        // 添加窗口关闭监听器
        this.addWindowListener(new java.awt.event.WindowAdapter() {
            @Override
            public void windowClosed(java.awt.event.WindowEvent e) {
                // 窗口关闭时减少计数器
                mainFrameImps.remove(MainFrameImp.this);
                // 检查是否是最后一个窗口
                if (mainFrameImps.isEmpty()) {
                    // 最后一个窗口关闭，退出程序
                    System.exit(0);
                }
            }
        });

        text = new TextImp();
        myMenu = new MyMenuImp(this, text);
        mainText = new MainTextImp(text);
        upLabel = new UpLabelImp();
        lowLabel = new LowLabelImp();

        setJMenuBar(myMenu);
        getContentPane().add(text.upLabel, BorderLayout.NORTH);
        getContentPane().add(mainText, BorderLayout.CENTER);
        getContentPane().add(text.lowLabel, BorderLayout.SOUTH);

        this.repaint();

//        if (createTemp && mainFrameImps.size() == 2) {
////            mainFrameImps.get(0).dispose();
////            mainFrameImps.remove(0);
//            for (MainFrameImp mainFrameImp : mainFrameImps) {
//                mainFrameImp.setVisible(true);
//            }
//            createTemp = false;
//        }

        try {
            // 方式1：从类路径加载图标（推荐，适用于打包后的JAR）
            URL iconUrl = getClass().getResource("/img.png");
            if (iconUrl != null) {
                Image icon = new ImageIcon(iconUrl).getImage();

                setIconImage(icon);

            } else {
                System.err.println("无法找到图标资源");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        setVisible(true);
    }

    // 创建多个窗口的静态方法
    public static MainFrameImp createNewWindow() {
        return new MainFrameImp();
    }
}